package Extend;

public class Animal {

    //父类中的成员变量 如果修饰词改成private 那么子类就不能直接访问了 子类只能访问公有的 不能直接访问私有的

    //只是不能直接调用  但是被继承了 赋值的话需要用set和get方法

    //构造方法 非私有 不能继承 private 也不能继承（类名不一样 不符合构造方法的规定）
    //成员变量都能被继承  private不能直接调用

    //成员方法 虚方法表上的可以继承 private static final 不能继承
    //非private static final 修饰的方法（虚方法）都会由父类把方法放到虚方法表上 传给子类 子类可以直接使用
    //static final是可以一层一层去找 调用的 而private不能 调用就报错

    //成员变量访问方法
    //就近原则 先找方法中的变量 没有就去本类找 在没有去父类找
    //this在本类找  super在父类找

    //成员方法访问特点
    //直接调用 就近原则 super 父类
    //方法调用 隐含this 查看调用者
    //当父类不能满足子类的一些应用场景的时候 子类再把方法写一遍 这种叫做重写
    //重写是在继承虚方法表的时候 把继承的覆盖掉
    //重载是名字一样参数不同 重写是名字参数都一样
    //@Override重写方法时加上注解 检验子类重写时语法是否正确
    //子类重写父类时 访问权限必须大于等于父类 空着<protected<public
    //子类重写父类时 返回值类型必须小于等于父类

    //构造方法的访问特点
    //子类的构造方法默认先访问父类的无参构造 在执行自己的
    //子类初始化之前，一定是调用父类的构造方法完成父类的数据空间的初始化
    //子类构造方法的第一行都是super(); 必须是在第一行 并且不写也存在
    //有参构造必须要手动调用super

    //this也是必须只写字第一行 （一般来讲给一些数据进行默认赋值的时候会用到）
    //this理解为一个变量 表示调用当前方法调用者的地址值


    public void Eat(){
        System.out.println("吃" + "饭");
    }
    public void Drink(){
        System.out.println("喝水");
    }

}
